웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > linux

[linux] 리눅스에서 Secure Copy, scp 사용하기

Last Modified : 2021-07-06 / Created : 2017-09-15
21,746
View Count

SCP는 Secure Copy의 약자로 리눅스 환경에서 remote로 전송할 수 있습니다. 즉, 외부로 복사하거나 외부 파일을 복사하여 가져올 수 있습니다. 일반적인 cp 명령어의 앞에 s를 붙여 scp를 사용합니다. 그럼 아래에서 자세하게 예제와 알아보세요.



# SCP, Secure Copy를 사용하여 외부, remote 저장소에 카피하기

아래는 다양한 scp를 사용하는 예제들입니다. 현재 로컬에서 외부 ip로 파일을 전송하거나 반대로 외부 ip의 자료를 현재 local에 가져올 수도 있습니다. 그럼 아래를 봐주세요.


! scp 명령어시 Permission 에러가 발생하는 경우

scp 사용시 만약 Permissions XXX for keyfile are too open. 이라는 에러가 발생할 수 있습니다. 이는 Private 키의 퍼미션이 제한적이지 않기 모두 공개되어 있기 때문에 발생하는 Permission 문제입니다. 이를 해결하기 위해서 chmod를 사용하여 400 또는 600 으로 제한하여 다시 시도해 보시기 바랍니다.
$ chmod 400 keyfile

만약 동작하지 않으면 root 권한을 가지고 있는지 역시 확인해보시기 바랍니다. root에서 user account로 변경 후 다시 시도해보세요.


! Remote Server에서 Permission denied가 발생하는 경우

이 경우 Permission error(Public)과는 리모트에서 Permission denied 에러가 발생한 경우입니다... 즉 scp를 사용하기 위해서는 보내는 local과 받는 remote server의 permission이 해당 사용자에 대하여 모든 Permission이 문제 제 없어야만 가능합니다.

remote server의 user가 webisfree인 경우라면 복사할 경로(/test/)에 chown을 사용하여 해당 사용자 권한을 아래와 같이 부여합니다.
$ chown webisfree test

이제 다시 시도해 보시기 바랍니다. 


! scp를 사용하여 다른 remote server에 ip로 복사하기

만약 현재 위치에 있는 abc.txt라는 이름의 파일을 특정 remote ip로 복사하는 방법입니다. 아래와 같이 user@ip:/경로/를 사용하여 파일을 전송할 수 있습니다.
$ scp abc.txt ubuntu@123.456.789.012:/test/

위에서는 사용자가 ubuntu, ip가 123.456.789.012인 경우의 예입니다. 실행하면 해당하는 패스워드를 입력하게 됩니다.


예제 ) ! remote의 webisfree.com에 있는 test.txt을 local host의 /home/ubuntu로 복사하기
$ scp ubuntu@webisfree.com:test.txt /home/ubuntu/


예제 ) ! remote의 webisfree.com에 있는 test.txt을 local host의 현재경로에 복사하기
$ scp ubuntu@webisfree.com:test.txt .


예제 ) test.txt를 webisfree.com의 8080포트로 remote 복사하기
$ scp -P 8080 test.txt ubuntu@webisfree.com

! Options 설정하기
-v  //  Debug 정보를 함께 출력합니다.
-i  //  인증이 필요한 경우 -> -i filename


[ 참고 !! ] 만약 리눅스에서 윈도우즈로 scp를 사용할 경우 경로는?
만약 windows가 파일을 전달 받는 client이 경우라면 아래와 같이 경로를 사용하도록 합니다. 예를들어 현재 리눅스에 있는 test.txt 파일을 윈도우 C:\tmp 경로로 파일을 전달하려고 합니다.
$ scp test.txt user@ipAddr:/C:/tmp


! 여러개의 파일 한번에 복사하기


아래는 test1.txt, test2.txt, test3.txt 파일(multi files copy)을 현재 경로에 복사합니다.
$ scp ubuntu@webisfree.com:/home/\{test1.txt, test2.txt, test3.txt\} . 

이처럼 여래개의 파일인 경우 쉽게 멀티복사가 가능하니다. 모습이 객체처럼 데이터를 처리, 복사합니다.


! 인증이 필요한 경우


만약 test.pem 파일로 인증이 필요한 경우 -i 옵션을 사용하여 아래처럼 실행합니다.
$ scp -i mykey.pem test.txt .

이제 인증을 거쳐 scp가 동작합니다. 만약 아래와 같이 사용자 ubuntu 복사할 위치 /home/ubuntu/로 파일을 전송하는 경우 아래와 같이 입력합니다.
sudo scp -i mykey.pem test.txt ubuntu@000.000.000.000:/home/ubuntu/

이제 키 파일을 사용하여 파일이 해당 경로에 복사, 전송됩니다.

Previous

Linux 쉘에서 ip 주소 확인하는 방법

Previous

리눅스(Linux) alias 명령어는 사용방법 및 예제보기